#include <stdio.h>
int *half_search(const int *p_val,int  size,int  val) {
	const int *p_head = p_val;	//指向要查找范围里最前面的存储区，最开始的时候指向数组里最前面的存储区。
	const int *p_tail = p_val + size - 1;	//指向要查找范围里最后面的存储区，最开始的时候指向数组里最前面的存储区。
	const int *p_mid = NULL;	//指向要查找范围里中间位置的存储区。
	while(p_head <= p_tail) {	//只要两个指针没有交错就需要继续查找
		//每次循环排除一般的数字
		p_mid = p_head + (p_tail - p_head + 1/*待查找范围里所有存储区的总个数*/) / 2;	//计算待查找范围中间位置存储区的地址并记录到p_mid指针里。
		if(*p_mid == val) {
			//中间位置存储区的内容就是要查找的数字。
			return (int *)p_mid;
		}
		else if(*p_mid > val) {
			//中间位置存储区的内容比要查找的数字大
			p_tail = p_mid - 1;	//p_tail指针指向中间位置存储区左边相邻的存储区，这就相当于排除右半边存储区以及中间位置的存储区。
		}
		else {
			//中间位置存储区的内容比要查找的数字小
			p_head = p_mid + 1;	//p_head指针指向中间位置存储区右边相邻的存储区，这就相当于排除左半边存储区以及中间位置的存储区。
		}
	}
	return NULL;
}
int main() {
	int arr[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
	int val = 0, *p_val = NULL;
	printf("请输入要查找的数字：");
	scanf("%d", &val);
	p_val = half_search(arr, 10, val);
	if(p_val) {
		printf("找到的数字是%d\n",*p_val);
	}
	else {
		printf("没有找到数字\n");
	}
	return 0;
}
